# parameter_frame.py
import os

from PyQt5.QtWidgets import QFrame, QLabel, QLineEdit, QTextEdit
from PyQt5.QtWidgets import QPushButton, QFileDialog
from PyQt5.QtGui import QFont
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtCore import QSize, Qt  # 导入 QSize



"模型输出源代码"
class ParameterFrame(QFrame):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setStyleSheet("background-color: white; border: 2px solid white;")
        self.setFixedSize(440, 320)
        self.setGeometry(20, 100, 440, 320)
        # 你可以在这里添加该框架的其他功能代码

        self.set_title()  # 添加标题

        # 创建按钮
        self.button1 = QPushButton("图片", self)
        self.button2 = QPushButton("文件夹", self)
        self.button3 = QPushButton("视频", self)
        self.button4 = QPushButton("摄像头", self)

        # 创建对应的文本框（显示路径和状态）
        self.path_label1 = QLabel("", self)
        self.path_label2 = QLabel("", self)
        self.path_label3 = QLabel("", self)

        # 初始化摄像头状态
        self.camera_status = False  # 默认为关闭状态
        self.path_label4 = QLabel("关闭", self)
        self.path_label4.setAlignment(Qt.AlignCenter)  # 设置文本居中
        # self.path_label4.setFont(self.path_label4.font().setPointSize(12))  # 设置字体大小


        # 设置按钮的位置和大小
        self.button1.setGeometry(15, 50+40, 150, 40)
        self.button2.setGeometry(15, 100+5+40, 165, 40)
        self.button3.setGeometry(15, 150+10+40, 150, 40)
        self.button4.setGeometry(15, 200+15+40, 165, 40)

        # 设置文本框的位置和大小
        self.path_label1.setGeometry(160, 50 + 40, 260, 40)
        self.path_label2.setGeometry(160, 100 + 5 + 40, 260, 40)
        self.path_label3.setGeometry(160, 150 + 10 + 40, 260, 40)
        self.path_label4.setGeometry(160, 200 + 15 + 40, 260, 40)

        # 设置文本框背景颜色、边框和圆角
        self.set_textbox_style(self.path_label1)
        self.set_textbox_style(self.path_label2)
        self.set_textbox_style(self.path_label3)
        self.set_textbox_style(self.path_label4)

        # 调整按钮文字大小
        font = QFont()
        font.setPointSize(14)  # 设置文字大小为14
        self.button1.setFont(font)
        self.button2.setFont(font)
        self.button3.setFont(font)
        self.button4.setFont(font)

        # 设置按钮文字左对齐并添加内边距
        self.button1.setStyleSheet("text-align: left; padding-left: 10px;")
        self.button2.setStyleSheet("text-align: left; padding-left: 10px;")
        self.button3.setStyleSheet("text-align: left; padding-left: 10px;")
        self.button4.setStyleSheet("text-align: left; padding-left: 10px;")

        # 设置按钮图标
        self.set_button_icon(self.button1, "ui/image/icons_image.png")  # 替换为实际路径
        self.set_button_icon(self.button2, "ui/image/icons_folder.png")  # 替换为实际路径
        self.set_button_icon(self.button3, "ui/image/icons_video.png")  # 替换为实际路径
        self.set_button_icon(self.button4, "ui/image/icons_camera.png")  # 替换为实际路径

        # 连接按钮点击事件
        self.button1.clicked.connect(self.select_image)
        self.button2.clicked.connect(self.select_folder)
        self.button3.clicked.connect(self.select_video)
        self.button4.clicked.connect(self.toggle_camera)

        # # 添加摄像头状态变量，初始化为关闭
        # self.camera_status = False  # False 表示关闭，True 表示开启

    def set_button_icon(self, button, image_path):
        # 设置按钮的图标
        icon = QIcon(image_path)
        button.setIcon(icon)
        button.setIconSize(QSize(40, 40))  # 设置图标的大小


    def set_textbox_style(self, label):
        # 设置文本框的背景颜色、边框和圆角
        label.setStyleSheet("""
            background-color: #f0f0f0;  /* 背景颜色 */
            border: 2px solid #ccc;     /* 边框颜色 */
            border-radius: 5px;         /* 圆角效果 */
            padding: 5px;               /* 内边距 */
        """)
        # 设置字体大小
        font = label.font()
        font.setPointSize(12)  # 设置字体大小为12
        label.setFont(font)



    def select_image(self):
        # 清除其他输入源的路径并关闭摄像头
        self.path_label2.clear()
        self.path_label3.clear()
        self.camera_status = False
        self.path_label4.setText("关闭")

        # 打开文件对话框，选择图片
        file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "图片文件 (*.png *.jpg *.bmp *.jpeg)")

        if file_name:
            # 更新显示框为选中的图片路径
            # self.path_label1.setText(f"已选择图片: {file_name}")
            # self.path_label1.setText(f"{os.path.basename(file_name)}")
            self.path_label1.setText(f"{file_name}")
            self.path_label1.setAlignment(Qt.AlignCenter)  # 将文本居中
            print(f"已选择图片文件: {file_name}")

    def select_folder(self):
        # 清除其他输入源的路径并关闭摄像头
        self.path_label1.clear()
        self.path_label3.clear()
        self.camera_status = False
        self.path_label4.setText("关闭")

        folder_name = QFileDialog.getExistingDirectory(self, "选择文件夹")
        if folder_name:
            # 更新显示框为选中的文件夹路径
            # self.path_label2.setText(f"已选择文件夹: {folder_name}")
            self.path_label2.setText(f"{folder_name}")
            self.path_label2.setAlignment(Qt.AlignCenter)  # 将文本居中
            print(f"已选择文件夹: {folder_name}")

    def select_video(self):
        # 清除其他输入源的路径并关闭摄像头
        self.path_label1.clear()
        self.path_label2.clear()
        self.camera_status = False
        self.path_label4.setText("关闭")

        file_name, _ = QFileDialog.getOpenFileName(self, "选择视频", "", "视频文件 (*.mp4 *.avi *.mkv *.mov)")
        if file_name:
            # 更新显示框为选中的视频文件路径
            # self.path_label3.setText(f"已选择视频文件: {file_name}")
            self.path_label3.setText(f"{file_name}")
            # self.path_label3.setAlignment(Qt.AlignCenter)  # 将文本居中
            print(f"已选择视频文件: {file_name}")

    def toggle_camera(self):
        # 清除其他输入源的路径
        self.path_label1.clear()
        self.path_label2.clear()
        self.path_label3.clear()

        if self.camera_status:
            self.camera_status = False  # 关闭摄像头
            self.path_label4.setText("关闭")  # 更新文本框显示为关闭
            self.path_label4.setAlignment(Qt.AlignCenter)  # 将文本居中
            print("摄像头已关闭")
        else:
            self.camera_status = True  # 打开摄像头
            self.path_label4.setText("开启")  # 更新文本框显示为开启
            self.path_label4.setAlignment(Qt.AlignCenter)  # 将文本居中
            print("摄像头已开启")

    # 添加仿宋字体并增加顶部间距
    def set_title(self):
        title = QLabel("模型输入源", self)  # 设置标题文字
        title.setFont(QFont("仿宋", 18))  # 设置字体为仿宋，大小为16
        title.setAlignment(Qt.AlignCenter)  # 让文字居中
        title.setGeometry(0, 15, self.width(), 50)  # 设置位置，0为X轴，10为顶部间距，宽度为窗口宽度，高度为30
        title.setStyleSheet("color: black;  font-weight: bold;")  # 设置字体颜色为黑色

